using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes.DomainAttributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Enums;
using System.Collections.Generic;
using System.ComponentModel;

namespace Baci.ArcGIS._SpatialStatisticsTools._Utilities
{
    /// <summary>
    /// <para>Collect Events</para>
    /// <para>Converts event data, such as crime or disease incidents, to weighted point data.</para>
    /// <para>将事件数据（如犯罪或疾病事件）转换为加权点数据。</para>
    /// </summary>    
    [DisplayName("Collect Events")]
    public class CollectEvents : AbstractGPProcess
    {
        /// <summary>
        /// 无参构造
        /// </summary>
        public CollectEvents()
        {

        }

        /// <summary>
        /// 有参构造
        /// </summary>
        /// <param name="_Input_Incident_Features">
        /// <para>Input Incident Features</para>
        /// <para>The features representing event or incident data.</para>
        /// <para>表示事件或事件数据的要素。</para>
        /// </param>
        /// <param name="_Output_Weighted_Point_Feature_Class">
        /// <para>Output Weighted Point Feature Class</para>
        /// <para>The output feature class to contain the weighted point data.</para>
        /// <para>用于包含加权点数据的输出要素类。</para>
        /// </param>
        public CollectEvents(object _Input_Incident_Features, object _Output_Weighted_Point_Feature_Class)
        {
            this._Input_Incident_Features = _Input_Incident_Features;
            this._Output_Weighted_Point_Feature_Class = _Output_Weighted_Point_Feature_Class;
        }
        public override string ToolboxName => "Spatial Statistics Tools";

        public override string ToolName => "Collect Events";

        public override string CallName => "stats.CollectEvents";

        public override List<string> AcceptEnvironments => ["MResolution", "MTolerance", "XYResolution", "XYTolerance", "ZResolution", "ZTolerance", "geographicTransformations", "outputCoordinateSystem", "outputMFlag", "outputZFlag", "outputZValue", "scratchWorkspace", "workspace"];

        public override object[] ParameterInfo => [_Input_Incident_Features, _Output_Weighted_Point_Feature_Class, _Results_Field, _Z_Max_Value];

        /// <summary>
        /// <para>Input Incident Features</para>
        /// <para>The features representing event or incident data.</para>
        /// <para>表示事件或事件数据的要素。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input Incident Features")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _Input_Incident_Features { get; set; }


        /// <summary>
        /// <para>Output Weighted Point Feature Class</para>
        /// <para>The output feature class to contain the weighted point data.</para>
        /// <para>用于包含加权点数据的输出要素类。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output Weighted Point Feature Class")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _Output_Weighted_Point_Feature_Class { get; set; }


        /// <summary>
        /// <para>Results Field</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Results Field")]
        [Description("")]
        [Option(OptionTypeEnum.derived)]
        public object _Results_Field { get; set; }


        /// <summary>
        /// <para>Z Max Value</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Z Max Value")]
        [Description("")]
        [Option(OptionTypeEnum.derived)]
        public double? _Z_Max_Value { get; set; }


        public CollectEvents SetEnv(object MResolution = null, object MTolerance = null, object XYResolution = null, object XYTolerance = null, object ZResolution = null, object ZTolerance = null, object geographicTransformations = null, object outputCoordinateSystem = null, object outputMFlag = null, object outputZFlag = null, object outputZValue = null, object scratchWorkspace = null, object workspace = null)
        {
            base.SetEnv(MResolution: MResolution, MTolerance: MTolerance, XYResolution: XYResolution, XYTolerance: XYTolerance, ZResolution: ZResolution, ZTolerance: ZTolerance, geographicTransformations: geographicTransformations, outputCoordinateSystem: outputCoordinateSystem, outputMFlag: outputMFlag, outputZFlag: outputZFlag, outputZValue: outputZValue, scratchWorkspace: scratchWorkspace, workspace: workspace);
            return this;
        }

    }

}